// #ifdef APP-PLUS
import { setAppTheme, getCurrentTheme, updateGlobalTheme } from './appThemeHelper.js';
// #endif

// #ifndef APP-PLUS
import pageThemeManager from './pageThemeManager.js';
// #endif
export default {
    data() {
        return {
            // 只有当组件没有通过props定义isDark时才在data中定义
            ...(this.$options.props && this.$options.props.isDark ? {} : { isDark: false })
        }
    },
    computed: {
        // 提供一个统一的isDark访问方式，兼容props和data两种情况
        currentIsDark() {
            // 如果组件有isDark prop，使用prop值；否则使用data或全局状态
            if (this.$options.props && this.$options.props.isDark) {
                return this.isDark; // 这里的isDark来自props
            } else {
                return this.isDark || getApp().isDark || false; // 这里的isDark来自data
            }
        }
    },
    onShow() {
        // 只有当没有通过props接收isDark时，才从全局状态同步
        if (!this.$options.props || !this.$options.props.isDark) {
            this.isDark = getApp().isDark || false;
        }
        this.setBodyDarkClass();
    },
    mounted() {
        // 所有组件都监听主题变化事件
        uni.$on('themeChange', this.handleThemeChange);
    },
    onLoad() {
        // 只有当没有通过props接收isDark时，才从全局状态同步
        if (!this.$options.props || !this.$options.props.isDark) {
            this.isDark = getApp().isDark || false;
        }
        this.setBodyDarkClass();
    },
    beforeDestroy() {
        // 取消监听
        uni.$off('themeChange', this.handleThemeChange);
    },
    onUnload() {
        // 取消监听
        uni.$off('themeChange', this.handleThemeChange);
    },
    watch: {
        isDark: {
            handler(newVal) {
                this.setBodyDarkClass();
            },
            immediate: true
        },
        // 同时监听computed属性变化
        currentIsDark: {
            handler(newVal) {
                this.setBodyDarkClass();
            },
            immediate: true
        }
    },
    methods: {
        // 处理全局主题变化事件
        handleThemeChange(isDark) {
            try {
                // 只有当组件没有通过props定义isDark时才更新data中的isDark
                if (!this.$options.props || !this.$options.props.isDark) {
                    this.isDark = isDark;
                }
                
                // 强制更新视图
                this.$nextTick(() => {
                    this.$forceUpdate();
                });
            } catch(e) {
                console.log('darkModeMixin handleThemeChange error:', e);
            }
        },
        
        // 提供一个方法供模板使用，确保向后兼容
        getIsDark() {
            return this.currentIsDark;
        },
        
        setBodyDarkClass() {
            try {
                // 使用currentIsDark来获取正确的主题状态
                const isDarkValue = this.currentIsDark;
                
                // #ifdef APP-PLUS
                // APP环境使用专门的主题辅助工具
                setAppTheme(isDarkValue);
                updateGlobalTheme(isDarkValue);
                // #endif
                
                // #ifndef APP-PLUS
                // 其他环境使用通用主题管理器
                pageThemeManager.setPageTheme(isDarkValue);
                // #endif
            } catch (e) {
                console.log('设置主题失败:', e);
            }
        }
    }
} 